package cur.nature.component.satoken.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 任务调度 Controller
 * 作者：Auto Generator By wujian
 * 生成日期：2024-04-28 18:27:31
 */
@Tag(name = "satoken安全框架 接口")
@RestController
@SaCheckPermission
@RequestMapping("component/satoken/v1/api/test")
@ConditionalOnProperty( value = {"cur.component.satoken.controller.enable"})
public class Component_SatokenController  {

    @Operation(summary = "登录")
    @GetMapping("login")
    @SaIgnore
    public String login(@RequestParam String username, @RequestParam String password) {
        // 1. 校验用户名和密码（这里模拟一个简单的校验）
        if("admin".equals(username) && "123456".equals(password)) {
            // 2. 登录，保存用户ID为10001
            StpUtil.login(10001);
            return "登录成功，Token：" + StpUtil.getTokenValue();
        }
        return "用户名或密码错误";
    }

    @Operation(summary = "登出")
    @GetMapping("/logout")
    public String logout() {
        StpUtil.logout(10001);
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    @Operation(summary = "是否登录")
    @GetMapping("/islogin")
    public String islogin() {
        return "当前会话是否登录：" + StpUtil.isLogin();
    }

    @Operation(summary = "询用户信息")
    @GetMapping("/info")
    public String getUserInfo() {
        // 校验是否登录
        StpUtil.checkLogin();
        // 获取用户ID
        int userId = StpUtil.getLoginIdAsInt();
        return "当前用户信息，ID：" + userId;
    }

    @Operation(summary = "测试权限")
    // 修改用户信息，需有权限"user:update"
//    @SaCheckPermission
    @GetMapping("/update")
    public String updateUser() {
        // 获取当前会话的Session
        SaSession session = StpUtil.getSession();
        // 存储数据
        session.set("name", "张三");
        session.set("email", "zhangsan@example.com");
        // 获取数据
        String name = session.getString("name");
        String email = session.getString("email");

        // 输出
        System.out.println("姓名：" + name);
        System.out.println("邮箱：" + email);
        return "用户信息更新成功";
    }

    // 仅管理员角色可访问
    @Operation(summary = "测试角色权限")
    @SaCheckRole
    @GetMapping("/dashboard")
    public String adminDashboard() {
        return "欢迎进入管理员控制台";
    }

}

